#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <limits.h>

// 从stdin读取参数输出
void echo()
{
	char ch;
	while (read(STDIN_FILENO, &ch, 1))
		printf("%c ", ch);

	printf("\nEND\n");
	sleep(30);
}

// 通过管道向子进程传递参数
int main(int argc, char** argv)
{
	printf("argc: %d\n", argc);
	if (argc == 0) // execve argv为NULL时为0
	{
		echo();
		return 0;
	}

	char* args = "msg from pipe";
	int pfd[2];
	pipe(pfd);
	dup2(pfd[0], STDIN_FILENO);

	if (fork() > 0)
	{
		close(pfd[0]);
		// 向子进程的stdin写参数
		write(pfd[1], args, strlen(args) + 1);
		close(pfd[1]);
	}
	else
	{
		close(pfd[1]);
#if 0
		char buf[PATH_MAX];
		if (argv[0][0] == '/')
			strcpy(buf, argv[0]);
		else
		{
			getcwd(buf, sizeof(buf));
			strcat(buf, "/");
			strcat(buf, argv[0]);
		}

		printf("path: %s\n", buf);

		// 子进程从stdin获取参数
		execve(buf, NULL, NULL);
#else
		execve(argv[0], NULL, NULL);
#endif
		perror("execve");
		close(pfd[0]);
	}
	return 0;
}
